package com.future.controller;

import com.future.domain.DTO.RoleDTO;
import com.future.domain.Permission;
import com.future.domain.Role;
import com.future.domain.Result;
import com.future.service.IRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/role")
public class RoleController {
    @Autowired
    private IRoleService roleService;
    /**
     * 获取角色列表
     * @return 角色列表
     */
    @GetMapping("/list")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result list() {
        return roleService.listRoles();
    }

    /**
     * 获取角色详情
     * @param id 角色ID
     * @return 角色详情
     */
    @GetMapping("/{id}")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result getById(@PathVariable Long id) {
        return roleService.getRoleById(id);
    }

    /**
     * 新增角色
     * @param roleDTO 角色DTO
     * @return 新增结果
     */
    @PostMapping("/save")
    @PreAuthorize("hasAuthority('超级管理员')")
    public Result save(@RequestBody RoleDTO roleDTO) {
        return roleService.saveRole(roleDTO);
    }

    /**
     * 更新角色
     * @param roleDTO 角色DTO
     * @return 更新结果
     */
    @PutMapping("/update")
    @PreAuthorize("hasAuthority('超级管理员')")
    public Result update(@RequestBody RoleDTO roleDTO) {
        return roleService.updateRole(roleDTO);
    }

    /**
     * 删除角色
     * @param id 角色ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    @PreAuthorize("hasAuthority('超级管理员')")
    public Result delete(@PathVariable Long id) {
        return roleService.deleteRole(id);
    }

    /**
     * 根据角色 ID 查询该角色拥有的权限列表
     * @param roleId 角色 ID
     * @return 权限列表
     */
    @GetMapping("/{roleId}/permissions")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result getPermissionsByRoleId(@PathVariable Long roleId) {
        List<Permission> permissions = roleService.selectPermissionsByRoleId(roleId);
        return Result.ok(permissions);
    }

    /**
     * 根据用户 ID 查询该用户的角色列表
     * @param userId 用户 ID
     * @return 角色列表
     */
    @GetMapping("/user/{userId}/roles")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result getUserRolesByUserId(@PathVariable Long userId) {
        List<Role> roles = roleService.selectUserRolesByUserId(userId);
        return Result.ok(roles);
    }

}
